# 模块一作业
#  张坤
# 2021.2.3

import random

"""
作业需求：
1、生成一副扑克牌（自己设计扑克牌的结构，小王和大王可以分别用14、15表示 ）

2、3个玩家(玩家也可以自己定义)
user_list = ["alex","武沛齐","李路飞"]

3、发牌规则
默认先给用户发一张牌，其中 J、Q、K、小王、大王代表的值为0.5，其他就是则就是当前的牌面值。
用户根据自己的情况判断是否继续要牌。
    要，则再给他发一张。（可以一直要牌，但是如果自己手中的牌总和超过11点，你的牌就爆掉了(牌面变成0)）
    不要，则开始给下个玩家发牌。（没有牌则则牌面默认是0）
如果用户手中的所有牌相加大于11，则表示爆了，此人的分数为0，并且自动开始给下个人发牌。

4、最终计算并获得每个玩家的分值，例如：
result = {
    "alex":8,
    "武沛齐":9,
    "李路飞":0
}

必备技术点：随机抽排
import random

total_poke_list = [("红桃", 1), ("黑桃", 2), ......,("大王", 15), ("小王", 14)]

# 随机生成一个数，当做索引。
index = random.randint(0, len(total_poke_list) - 1)
# 获取牌
print("抽到的牌为：", total_poke_list[index])
# 踢除这张牌
total_poke_list.pop(index)

print("抽完之后，剩下的牌为：", total_poke_list)
踩分点:

请补充完善你的代码
result = {}    # 存储最终各位玩家的得分
user_list = ["alex","武沛齐","李路飞"]
# 补充代码


print(result)

"""
# 玩家姓名
user_list = ["高进", "陈刀仔", "陈金城"]
# 玩家和手牌
user_dic = {}

# 生成扑克
# 扑克花色 黑红梅方  0.5
type_poker = ["♠️", "♥️", "♣️️", "♦️️"]
# 牌面
num_list = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]
# 大小王 0.5
joker_poker = ["JOKER", "JOKER"]
# 扑克集合
poker_list = []
# 扑克对应的数值
poker_num_dic = {}
# 生成扑克
for type in type_poker:
	for num in num_list:
		poker_list.append((type, num))
for i in range(len(joker_poker)):
	poker_list.append((joker_poker[i], i))

# 赋值扑克数字词典
for item in poker_list:
	if item[1] == "J" or item[1] == "Q" or item[1] == "K" or item[0] == "JOKER":
		poker_num_dic.setdefault(item, 0.5)
	elif item[1] == "A":
		poker_num_dic.setdefault(item, 1)
	else:
		poker_num_dic.setdefault(item, item[1])


print("赌王大赛".center(50, "*"))

for user in user_list:
	# 生成随机数获取扑克牌下标
	index = random.randint(0, len(poker_list) - 1)
	# 每个人先发一张牌  每个人有很多牌 字典里面 人名为键值 不可重复 ，键值为列表类型的牌可以有很多
	user_dic.setdefault(user, [poker_list[index]])
	# 移除已经发放的牌
	del poker_list[index]

# 输出玩家手牌
for user, num in user_dic.items():
	print("玩家:{},手牌为:{}".format(user, num))

print("剩余{}张牌".format(len(poker_list)).center(50, "*"))
# 开始叫牌
# 选择为哪个玩家发牌
select_user = 0
while select_user < len(user_list):
	# 生成下一张牌
	index = random.randint(0, len(poker_list) - 1)
	# 选择发牌玩家
	select = input("请规范输入，暂时不做错误处理,请为玩家{}发牌:y or n, q直接退出结算: ".format(user_list[select_user]))
	print(poker_list[index])
	# 退出
	if select.upper() == "Q":
		break
	# 为下一位玩家发牌
	if select.upper() == "N":
		select_user += 1
	# 为当前玩家发牌
	if select.upper() == "Y":
		# 发牌
		user_dic[user_list[select_user]].append(poker_list[index])
		# 移除已经发放的牌
		del poker_list[index]
		# 计算玩家分数 玩家 姓名 取到扑克词典 循环拿到扑克 初始化玩家分数
		user_num = 0
		for user_poker in user_dic[user_list[select_user]]:
			# 玩家分数
			user_num += float(poker_num_dic[user_poker])
		# 判断是否超分数
		if user_num > 11:
			print("玩家:{},手牌:{},玩家分数:{}爆掉了为0".format(user_list[select_user], user_dic[user_list[select_user]], user_num))
			select_user += 1
			# 开始下一玩家发牌
			continue
		print("玩家:{},手牌:{},玩家分数:{}".format(user_list[select_user], user_dic[user_list[select_user]],user_num))
		pass

	# # 发牌第一轮完成是否开始第二轮
	# if select_user == len(user_list):
	# 	again = input("是否继续下一轮发牌:")
	# 	if again.upper() == "Y":
	# 		select_user = 0
	# 	else:
	# 		print("开始结算".center(50, "*"))
	# 		break

print("开始结算".center(50, "*"))
for user, pockers in user_dic.items():
	user_num_result = 0
	for user_poker in pockers:
		# 玩家分数
		user_num_result += float(poker_num_dic[user_poker])
	if user_num_result > 11:
		print("玩家:{},手牌为:{},分数:0".format(user, pockers))
	else:
		print("玩家:{},手牌为:{},分数:{}".format(user, pockers,user_num_result))
print("剩余{}张牌".format(len(poker_list)).center(50, "*"))
